home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / Visual Cafe Pro v1.0 / VISCAFE.BIN / KeyPressManagerPanel.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-06-19  |  5.5 KB  |  365 lines

  1. package symantec.itools.awt;
  2.  
  3. import java.awt.Button;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Event;
  7. import java.awt.Label;
  8. import java.awt.Panel;
  9. import java.awt.TextComponent;
  10. import java.awt.TextField;
  11. import java.util.Vector;
  12. import symantec.itools.lang.OS;
  13.  
  14. public class KeyPressManagerPanel extends Panel {
  15.    public static final int PLAIN = 0;
  16.    public static final int SHIFT = 1;
  17.    public static final int CTRL = 2;
  18.    Vector tabbed;
  19.    Button defaultButton;
  20.    Button cancelButton;
  21.    Event defaultEvent;
  22.    Event cancelEvent;
  23.    Event[] fKeyEvents = new Event[36];
  24.    Container defaultDeliver;
  25.    Container cancelDeliver;
  26.    Container[] fKeyDeliver = new Container[36];
  27.    boolean bDefaultSetFocus;
  28.    boolean bCancelSetFocus;
  29.    boolean bTabHack;
  30.    boolean bAutoTab = true;
  31.    boolean bOnlyTabToTextComponents;
  32.    Event eventLostFocus;
  33.  
  34.    public KeyPressManagerPanel() {
  35.       if (OS.isMacintosh()) {
  36.          this.bOnlyTabToTextComponents = true;
  37.       } else {
  38.          this.bOnlyTabToTextComponents = false;
  39.       }
  40.  
  41.       this.resetKeyManager();
  42.    }
  43.  
  44.    public void setAutoTabState(boolean var1) {
  45.       this.bAutoTab = var1;
  46.    }
  47.  
  48.    public boolean getAutoTabState() {
  49.       return this.bAutoTab;
  50.    }
  51.  
  52.    public void setTabToTextComponetsOnly(boolean var1) {
  53.       this.bOnlyTabToTextComponents = var1;
  54.    }
  55.  
  56.    public boolean getTabToTextComponetsOnly() {
  57.       return this.bOnlyTabToTextComponents;
  58.    }
  59.  
  60.    public synchronized boolean handleEvent(Event var1) {
  61.       switch (var1.id) {
  62.          case 401:
  63.             this.bTabHack = false;
  64.             if (this.keyPressed(var1)) {
  65.                return true;
  66.             }
  67.             break;
  68.          case 402:
  69.             if (this.bTabHack) {
  70.                this.bTabHack = false;
  71.                this.eventLostFocus.key = var1.key;
  72.                this.eventLostFocus.modifiers = var1.modifiers;
  73.                if (this.keyPressed(this.eventLostFocus)) {
  74.                   return true;
  75.                }
  76.             }
  77.             break;
  78.          case 403:
  79.             int var6 = var1.key - 1008;
  80.             switch (var1.modifiers) {
  81.                case 0:
  82.                   break;
  83.                case 1:
  84.                   var6 += 12;
  85.                   break;
  86.                case 2:
  87.                   var6 += 24;
  88.                   break;
  89.                default:
  90.                   var6 = -1;
  91.             }
  92.  
  93.             if (var6 > -1 && var6 < 36 && this.fKeyEvents[var6] != null) {
  94.                this.deliverEventTo(this.fKeyEvents[var6], this.fKeyDeliver[var6]);
  95.                return true;
  96.             }
  97.             break;
  98.          case 1001:
  99.             if (var1.target instanceof TextField) {
  100.                boolean var2 = false;
  101.                int var3 = ((Container)this).countComponents();
  102.  
  103.                for(int var4 = 0; var4 < var3; ++var4) {
  104.                   Component var5 = ((Container)this).getComponent(var4);
  105.                   if (var5 != null && var5 == var1.target) {
  106.                      var2 = true;
  107.                      break;
  108.                   }
  109.                }
  110.  
  111.                if (var2) {
  112.                   boolean var7 = this.clickDefaultButton();
  113.                   if (var7) {
  114.                      return true;
  115.                   }
  116.                }
  117.             }
  118.             break;
  119.          case 1005:
  120.             if (var1.target instanceof TextComponent) {
  121.                this.eventLostFocus = var1;
  122.                this.bTabHack = true;
  123.             }
  124.       }
  125.  
  126.       return super.handleEvent(var1);
  127.    }
  128.  
  129.    boolean clickDefaultButton() {
  130.       if (this.defaultButton != null && this.defaultButton.isEnabled()) {
  131.          if (this.bDefaultSetFocus) {
  132.             this.defaultButton.requestFocus();
  133.          }
  134.  
  135.          this.deliverEventTo(this.defaultEvent, this.defaultDeliver);
  136.          return true;
  137.       } else {
  138.          return false;
  139.       }
  140.    }
  141.  
  142.    boolean keyPressed(Event var1) {
  143.       switch (var1.key) {
  144.          case 9:
  145.             if (var1.target instanceof Component) {
  146.                return this.doTab((Component)var1.target, var1.modifiers);
  147.             }
  148.  
  149.             return this.doTab(this, var1.modifiers);
  150.          case 10:
  151.             boolean var2 = this.clickDefaultButton();
  152.             if (var2) {
  153.                return true;
  154.             }
  155.             break;
  156.          case 27:
  157.             if (this.cancelButton != null && this.cancelButton.isEnabled()) {
  158.                if (this.bCancelSetFocus) {
  159.                   this.cancelButton.requestFocus();
  160.                }
  161.  
  162.                this.deliverEventTo(this.cancelEvent, this.cancelDeliver);
  163.                return true;
  164.             }
  165.       }
  166.  
  167.       return false;
  168.    }
  169.  
  170.    public void resetKeyManager() {
  171.       this.tabbed = new Vector();
  172.       this.defaultButton = null;
  173.       this.cancelButton = null;
  174.       this.defaultEvent = null;
  175.       this.cancelEvent = null;
  176.       this.defaultDeliver = null;
  177.       this.cancelDeliver = null;
  178.       this.bDefaultSetFocus = false;
  179.       this.bCancelSetFocus = false;
  180.  
  181.       for(int var1 = 0; var1 < 36; ++var1) {
  182.          this.fKeyEvents[var1] = null;
  183.          this.fKeyDeliver[var1] = null;
  184.       }
  185.  
  186.    }
  187.  
  188.    public Component add(Component var1) {
  189.       if (this.bAutoTab && !(var1 instanceof Label)) {
  190.          this.setTabStop(var1);
  191.       }
  192.  
  193.       return super.add(var1);
  194.    }
  195.  
  196.    public void removeDefaultButton() {
  197.       this.defaultButton = null;
  198.       this.defaultEvent = null;
  199.       this.defaultDeliver = null;
  200.       this.bDefaultSetFocus = false;
  201.    }
  202.  
  203.    public void setTabStop(Component var1) {
  204.       if (var1 != this) {
  205.          this.tabbed.addElement(var1);
  206.       }
  207.  
  208.    }
  209.  
  210.    public void setDefaultButton(Button var1) {
  211.       this.setDefaultButton(var1, new Event(var1, 1001, (Object)null), (Container)null, true);
  212.    }
  213.  
  214.    public void setDefaultButton(Button var1, Event var2, Container var3, boolean var4) {
  215.       this.defaultButton = var1;
  216.       this.defaultEvent = var2;
  217.       this.defaultDeliver = var3;
  218.       this.bDefaultSetFocus = var4;
  219.       ((Component)var1).requestFocus();
  220.    }
  221.  
  222.    public void setCancelButton(Button var1) {
  223.       this.setCancelButton(var1, new Event(var1, 1001, (Object)null), (Container)null, true);
  224.    }
  225.  
  226.    public void setCancelButton(Button var1, Event var2, Container var3, boolean var4) {
  227.       this.cancelButton = var1;
  228.       this.cancelEvent = var2;
  229.       this.bCancelSetFocus = var4;
  230.       this.cancelDeliver = var3;
  231.    }
  232.  
  233.    public void removeCancelButton() {
  234.       this.cancelButton = null;
  235.       this.cancelEvent = null;
  236.       this.cancelDeliver = null;
  237.       this.bCancelSetFocus = false;
  238.    }
  239.  
  240.    public void setFKeyEvent(int var1, Event var2, Container var3) {
  241.       this.setFKeyEvent(var1, 0, var2, var3);
  242.    }
  243.  
  244.    public void removeFKeyEvent(int var1) {
  245.       this.removeFKeyEvent(var1, 0);
  246.    }
  247.  
  248.    public void setFKeyEvent(int var1, int var2, Event var3, Container var4) {
  249.       int var5 = var1 - 1008;
  250.       if (var5 >= 0 && var5 <= 11) {
  251.          switch (var2) {
  252.             case 0:
  253.             default:
  254.                break;
  255.             case 1:
  256.                var5 += 12;
  257.                break;
  258.             case 2:
  259.                var5 += 24;
  260.          }
  261.  
  262.          this.fKeyEvents[var5] = var3;
  263.          this.fKeyDeliver[var5] = var4;
  264.       }
  265.    }
  266.  
  267.    public void removeFKeyEvent(int var1, int var2) {
  268.       int var3 = var1 - 1008;
  269.       if (var3 >= 0 && var3 <= 11) {
  270.          switch (var2) {
  271.             case 0:
  272.             default:
  273.                break;
  274.             case 1:
  275.                var3 += 12;
  276.                break;
  277.             case 2:
  278.                var3 += 24;
  279.          }
  280.  
  281.          this.fKeyEvents[var3] = null;
  282.          this.fKeyDeliver[var3] = null;
  283.       }
  284.    }
  285.  
  286.    void deliverEventTo(Event var1, Container var2) {
  287.       if (var2 == null) {
  288.          ((Component)this).postEvent(var1);
  289.       } else {
  290.          ((Component)var2).postEvent(var1);
  291.       }
  292.    }
  293.  
  294.    boolean doTab(Component var1, int var2) {
  295.       int var3 = this.tabbed.size();
  296.       if (var3 > 0 && (var2 == 0 || var2 == 1)) {
  297.          Object var4 = null;
  298.          int var5 = this.tabbed.indexOf(var1);
  299.          int var6 = var5;
  300.          if (var5 == -1) {
  301.             for(Object var7 = var1; var7 != this && var5 == -1; var7 = ((Component)var7).getParent()) {
  302.                var5 = this.tabbed.indexOf(var7);
  303.             }
  304.          }
  305.  
  306.          if (var5 == -1) {
  307.             if (var2 == 0) {
  308.                this.doTab((Component)this.tabbed.lastElement(), var2);
  309.             } else {
  310.                this.doTab((Component)this.tabbed.firstElement(), var2);
  311.             }
  312.  
  313.             return true;
  314.          }
  315.  
  316.          int var14 = var5;
  317.  
  318.          while(true) {
  319.             if (var2 == 0) {
  320.                ++var5;
  321.                if (var5 == var3) {
  322.                   var5 = 0;
  323.                }
  324.             } else {
  325.                --var5;
  326.                if (var5 == -1) {
  327.                   var5 = var3 - 1;
  328.                }
  329.             }
  330.  
  331.             if (var14 == var5) {
  332.                break;
  333.             }
  334.  
  335.             try {
  336.                Component var12 = (Component)this.tabbed.elementAt(var5);
  337.                if (var12.isEnabled() && var12.isVisible() && (!this.bOnlyTabToTextComponents || var12 instanceof TextComponent)) {
  338.                   var12.requestFocus();
  339.                   if (var12 instanceof TextComponent) {
  340.                      TextComponent var8 = (TextComponent)var12;
  341.                      var8.selectAll();
  342.                   }
  343.  
  344.                   Component var15 = (Component)this.tabbed.elementAt(var6);
  345.                   Event var9 = new Event(var15, 1005, (Object)null);
  346.                   var15.postEvent(var9);
  347.                   if (var15 instanceof TextComponent) {
  348.                      TextComponent var10 = (TextComponent)var15;
  349.                      var10.select(0, 0);
  350.                   }
  351.  
  352.                   var12 = (Component)this.tabbed.elementAt(var5);
  353.                   Event var16 = new Event(var12, 1004, (Object)null);
  354.                   var12.postEvent(var16);
  355.                   return true;
  356.                }
  357.             } catch (ArrayIndexOutOfBoundsException var11) {
  358.             }
  359.          }
  360.       }
  361.  
  362.       return false;
  363.    }
  364. }
  365.